{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Artificial Intelligence Nanodegree\n",
    "\n",
    "## Convolutional Neural Networks\n",
    "\n",
    "---\n",
    "\n",
    "In this notebook, we train an MLP to classify images from the MNIST database.\n",
    "\n",
    "### 1. Load MNIST Database"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "``` python\n",
    "from keras.datasets import mnist\n",
    "\n",
    "# use Keras to import pre-shuffled MNIST database\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()\n",
    "```\n",
    "Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz\n",
    "\n",
    "使用`(X_train, y_train), (X_test, y_test) = mnist.load_data()`经常会遇到网络问题导致中断。  \n",
    "\n",
    "**解决办法：**  \n",
    "复制上面链接使用迅雷进行下载，然后解压缩得到`npy`二进制文件。  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The MNIST database has a training set of 60000 examples.\n",
      "The MNIST database has a test set of 10000 examples.\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "X_train = np.load( \"mnist/x_train.npy\" )\n",
    "y_train = np.load( \"mnist/y_train.npy\" )\n",
    "X_test = np.load( \"mnist/x_test.npy\" )\n",
    "y_test = np.load( \"mnist/y_test.npy\" )\n",
    "\n",
    "print(\"The MNIST database has a training set of %d examples.\" % len(X_train))\n",
    "print(\"The MNIST database has a test set of %d examples.\" % len(X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 28, 28)\n",
      "(60000,)\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape)\n",
    "print(y_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Visualize the First Six Training Images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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CmsffPDBMO/fv3+Y77bbbqVsxIgRYe2BBx4Y5g888ECYR1599dUw33DDDRu+xrLyJg4AAABADRjiAAAAANSAIQ4AAABADRjiAAAAANSAIQ4AAABADdhOtYw23XTTUnbKKaeEtYccckiYr7POOsvcxyeffBLmc+bMKWVVJ+az/Ms5N5UPGzaslJ1++umd2tOy+MEPflDKfvrTn4a1q622WphPmDAhzI8++uiONwbQQ6y55pph3syzwpVXXhnm8+fP71BPUBf33Xdfq1ugDZxwwgmlrGoL1YcffhjmJ554Yimr2j64yy67hPlxxx0X5l/96ldLWdVmtl/84hdhPn78+FJWteWpygcffBDmf/jDHxrKUkpp+PDhYf6tb32r4T6in1+6mzdxAAAAAGrAEAcAAACgBgxxAAAAAGrAEAcAAACgBhxs/G+qDhmuOgQpOsR44MCBndnS/2f69OlhPm7cuDC/8847u6wXul9RFE3l0f186aWXhrXXXnttmL/zzjthHh2KdtRRR4W122yzTZivt956peyVV14Ja6sOD6w6UBPaXdWB5ptsskkpe+KJJ7q6HZZz0aGSKaW0wgrL/vu8xx9/fJmvAXW07777troF2sBZZ53VcO2KK64Y5iNHjixlY8aMCWs32mijhr9elaprn3POOWFetYSnu/32t79tKl9eeRMHAAAAoAYMcQAAAABqwBAHAAAAoAYMcQAAAABqwBAHAAAAoAZ6xHaqtddeu5RtscUWYe3ll18e5ptttlmn9vTfTZ06tZRdcMEFYe0dd9wR5osXL+7UnmgP0Qn2J598clh76KGHhvkHH3wQ5htvvHHHG1sq2mjy4IMPhrXNnNwPPUHVVrrO2DZEvQ0ePLiUDR06NKyten5YtGhRmF9xxRWl7I033miiO2gfX/ziF1vdAm3g9ddfL2UDBgwIa/v06RPmVZtgI/fcc0+YP/LII2F+++23l7KXXnoprF1etlC1O096AAAAADVgiAMAAABQA4Y4AAAAADVgiAMAAABQA4Y4AAAAADVQy+1Ua6yxRphfddVVYR5taejK0+SjjTsppXTRRReF+X333VfKPvroo07tifYwZcqUMJ82bVqY77jjjg1fe5111gnzaLtblXfeeSfMJ06cGOann356w9cGGrPrrruWsuuuu677G6FlVl999VJW9Rlf5bXXXgvzM844o0M9QTv685//HOZVWwJtkyWyxx57lLJhw4aFtdttt12Yv/nmm6Xs2muvDWvfe++9MK/aSsjyx5s4AAAAADVgiAMAAABQA4Y4AAAAADVgiAMAAABQA8vNwcY777xzmI8cObKU7bTTTmHtF77whU7t6b/78MMPw/zSSy8tZWeffXZYu2DBgk7tiZ5n1qxZYX7IIYeE+YknnljKRo8e3Sm9XHLJJaXsV7/6VVj7wgsvdMrXBP5LzrnVLQD0aE8//XSYz5w5M8yjxSpf+tKXwtq33nqr441RK/PmzStlN954Y1hbldOzeBMHAAAAoAYMcQAAAABqwBAHAAAAoAYMcQAAAABqwBAHAAAAoAaWm+1UBx98cFN5M5599tlSdvfdd4e1H3/8cZhfdNFFYT537tyONwadZM6cOWE+ZsyYhjJg+XXvvfeG+WGHHdbNnVAXzz33XCl7/PHHw9rdd9+9q9uBHqdqU+0111xTysaNGxfWnnrqqWEe/VwD9CzexAEAAACoAUMcAAAAgBowxAEAAACoAUMcAAAAgBowxAEAAACogVwURePFOTdeDJ2sKIrcqq/t3qeV3Pv0YH8pimKHVn1x9z+t5LO/vvr37x/mt9xySykbOnRoWHvrrbeG+XHHHRfmCxYsaLC75Z97nx6soeceb+IAAAAA1IAhDgAAAEANGOIAAAAA1IAhDgAAAEANGOIAAAAA1IDtVNSGk+rpqdz79GC2U9Fj+exvP9HWqnHjxoW1J510UpgPGjQozJ999tmON7acce/Tg9lOBQAAANAuDHEAAAAAasAQBwAAAKAGDHEAAAAAasDBxtSGQ87oqdz79GAONqbH8tlPT+XepwdzsDEAAABAuzDEAQAAAKgBQxwAAACAGjDEAQAAAKgBQxwAAACAGujVZP3bKaWXu6IR+BQbtPjru/dpFfc+PZn7n57KvU9P5d6nJ2vo/m9qxTgAAAAAreGvUwEAAADUgCEOAAAAQA0Y4gAAAADUgCEOAAAAQA0Y4gAAAADUgCEOAAAAQA0Y4gAAAADUgCEOAAAAQA0Y4gAAAADUwP8Fc1l4oyGRvWAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x1440 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.cm as cm\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "# plot first six training images\n",
    "fig = plt.figure(figsize=(20,20))\n",
    "for i in range(6):\n",
    "    ax = fig.add_subplot(1, 6, i+1, xticks=[], yticks=[])\n",
    "    ax.imshow(X_train[i], cmap='gray')\n",
    "    ax.set_title(str(y_train[i]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. View an Image in More Detail"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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W1vTuHFjtcjo0aMHM2bMoEWLFqxevbpQvhs3brBu3Tq+/fZbFixYQFpamtEM8xYWFrRp04bDhw8/VVcOiqIQFhbGokWL1A9NFxcXGjduzPfff8/cuXNxd3cvlEuv17NmzRp2795NVFQUR48exdLSkoYNGwLZt3OcnJwKnS2Hkn4M17orN5opinKfdQFFOlt5kj6tukzt01q2Vq1acePGjTyXRD/++GNGjBjBkiVLSE1NJTMz85GeO3fu8M477zBlyhT1KtGnn37K8ePH6dmzJ9999x2QfcutYcOGnDx5kh07djB69Ghu376dr69nz56EhoZib2/PwIEDiYuL49ChQzg5OTFy5Eh1XT8/P44dO8bevXuZNm2a0Rm5ll2STTvZevXqxVdffYW9vT3vv/8+sbGxHDx4ECcnJ0aNGpVn/4/i4sWL/Prrr4wePZqRI0dy/vx59e9n5cqVDB8+nKioKNq1a1con52dHb6+vnzwwQcEBgZiY2ND69at1ecHDBjAyZMnC3WLxJSuHN5//33effddPvroI1577TW8vLywsLCgfPnyBAYGMnv2bCZNmlQoV1ZWFt26daNNmzY0atSIunXrMmLECD7++GOWL19OamoqDx48KHS2HEryMfzf4MqNZooig8GAi4uL+rhGjRqPvFz8NH1adZX0bF5eXrzwwgv89ttvfP755zRr1oxJkyZx9OhR+vfvz1tvvcWhQ4fUW2n5kZGRwTvvvEOPHj3o1KlTnud79OjB+vXrAfj555/p1KkTOp2O2rVrU7NmTeLi4vL4evTowRtvvEH37t0BqFq1KhYWFuj1egIDA9m/f3+e/bi7u2NnZ8fx48c175Js2snWq1cvAgIC6NatWx5X//79OXDgQB7X49i5cyfjxo1jypQp3Llzh8uXLxs9v2fPHpo1a1YoV6NGjbh8+TK3b98mMzOTvXv34ubmBkCvXr2wt7dn0aJFT92Vw7Vr14DsK8w7duygQYMGXL16le3btwNw8uRJsrKyitSxPCUlhX379tGqVSuio6Pp06cPvXr14sCBA5w7d65I+aBkH8P/Da7caKYo2r9/P3Xr1sXV1RUrKyt69+5NRESEJnxadZX0bLNmzeL//u//ePXVV/n444/Zv38/n376KZUqVQLAysqKd999l5UrV+a7vaIoDBs2jHr16hmNMElISFD/v2HDBurWrQtk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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def visualize_input(img, ax):\n",
    "    ax.imshow(img, cmap='gray')\n",
    "    width, height = img.shape\n",
    "    thresh = img.max()/2.5\n",
    "    for x in range(width):\n",
    "        for y in range(height):\n",
    "            ax.annotate(str(round(img[x][y],2)), xy=(y,x),\n",
    "                        horizontalalignment='center',\n",
    "                        verticalalignment='center',\n",
    "                        color='white' if img[x][y]<thresh else 'black')\n",
    "\n",
    "fig = plt.figure(figsize = (10,10)) \n",
    "ax = fig.add_subplot(111)\n",
    "visualize_input(X_train[0], ax)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Rescale the Images by Dividing Every Pixel in Every Image by 255"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# rescale [0,255] --> [0,1]\n",
    "X_train = X_train.astype('float32')/255\n",
    "X_test = X_test.astype('float32')/255 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Encode Categorical Integer Labels Using a One-Hot Scheme\n",
    "\n",
    "使用onehot的直接原因是现在多分类cnn网络的输出通常是**softmax**层，它的输出是一个概率分布，从而要求输入的标签也以概率分布的形式出现，进而方便计算交叉熵。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Integer-valued labels:\n",
      "[5 0 4 1 9 2 1 3 1 4]\n",
      "One-hot labels:\n",
      "[[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n",
      " [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
      " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n",
      " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
      " [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
      " [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]\n",
      " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
      " [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]\n",
      " [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
      " [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]]\n"
     ]
    }
   ],
   "source": [
    "from keras.utils import np_utils\n",
    "\n",
    "# print first ten (integer-valued) training labels\n",
    "print('Integer-valued labels:')\n",
    "print(y_train[:10])\n",
    "\n",
    "# one-hot encode the labels\n",
    "y_train = np_utils.to_categorical(y_train, 10)\n",
    "y_test = np_utils.to_categorical(y_test, 10)\n",
    "\n",
    "# print first ten (one-hot) training labels\n",
    "print('One-hot labels:')\n",
    "print(y_train[:10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. Define the Model Architecture"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "flatten_3 (Flatten)          (None, 784)               0         \n",
      "_________________________________________________________________\n",
      "dense_7 (Dense)              (None, 512)               401920    \n",
      "_________________________________________________________________\n",
      "dropout_5 (Dropout)          (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_8 (Dense)              (None, 256)               131328    \n",
      "_________________________________________________________________\n",
      "dropout_6 (Dropout)          (None, 256)               0         \n",
      "_________________________________________________________________\n",
      "dense_9 (Dense)              (None, 10)                2570      \n",
      "=================================================================\n",
      "Total params: 535,818\n",
      "Trainable params: 535,818\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Dropout, Flatten\n",
    "\n",
    "# define the model\n",
    "model = Sequential()\n",
    "# flatter layer：将图片矩阵转换为向量\n",
    "model.add(Flatten(input_shape=X_train.shape[1:])) # (28, 28)\n",
    "model.add(Dense(512, activation='relu'))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(256, activation='relu'))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(10, activation='softmax'))\n",
    "\n",
    "# summarize the model\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7. Compile the Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "# compile the model, specify the loss function and optimizer\n",
    "model.compile(loss='categorical_crossentropy',\n",
    "              optimizer='rmsprop',\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8. Calculate the Classification Accuracy on the Test Set (Before Training)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 1s 72us/step\n",
      "Test accuracy: 6.5000%\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[2.3546462242126465, 0.065]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# evaluate test accuracy\n",
    "score = model.evaluate(X_test, y_test, verbose=1)\n",
    "accuracy = 100 * score[1]\n",
    "\n",
    "# print test accuracy\n",
    "print('Test accuracy: %.4f%%' % accuracy)\n",
    "\n",
    "score # [loss, accuracy]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 9. Train the Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 48000 samples, validate on 12000 samples\n",
      "Epoch 1/15\n",
      "47616/48000 [============================>.] - ETA: 0s - loss: 0.2908 - acc: 0.9106Epoch 00001: val_loss improved from inf to 0.12739, saving model to mnist.model.best.hdf5\n",
      "48000/48000 [==============================] - 7s 140us/step - loss: 0.2894 - acc: 0.9109 - val_loss: 0.1274 - val_acc: 0.9613\n",
      "Epoch 2/15\n",
      "47744/48000 [============================>.] - ETA: 0s - loss: 0.1194 - acc: 0.9637- ETAEpoch 00002: val_loss improved from 0.12739 to 0.10013, saving model to mnist.model.best.hdf5\n",
      "48000/48000 [==============================] - 7s 139us/step - loss: 0.1195 - acc: 0.9636 - val_loss: 0.1001 - val_acc: 0.9690\n",
      "Epoch 3/15\n",
      "47616/48000 [============================>.] - ETA: 0s - loss: 0.0819 - acc: 0.9739Epoch 00003: val_loss improved from 0.10013 to 0.08214, saving model to mnist.model.best.hdf5\n",
      "48000/48000 [==============================] - 6s 131us/step - loss: 0.0820 - acc: 0.9739 - val_loss: 0.0821 - val_acc: 0.9757\n",
      "Epoch 4/15\n",
      "47872/48000 [============================>.] - ETA: 0s - loss: 0.0659 - acc: 0.9799Epoch 00004: val_loss did not improve\n",
      "48000/48000 [==============================] - 7s 143us/step - loss: 0.0658 - acc: 0.9799 - val_loss: 0.0967 - val_acc: 0.9751\n",
      "Epoch 5/15\n",
      "47744/48000 [============================>.] - ETA: 0s - loss: 0.0539 - acc: 0.9823Epoch 00005: val_loss did not improve\n",
      "48000/48000 [==============================] - 6s 134us/step - loss: 0.0537 - acc: 0.9824 - val_loss: 0.0868 - val_acc: 0.9774\n",
      "Epoch 6/15\n",
      "47488/48000 [============================>.] - ETA: 0s - loss: 0.0455 - acc: 0.9857Epoch 00006: val_loss did not improve\n",
      "48000/48000 [==============================] - 6s 135us/step - loss: 0.0452 - acc: 0.9857 - val_loss: 0.0951 - val_acc: 0.9776\n",
      "Epoch 7/15\n",
      "47744/48000 [============================>.] - ETA: 0s - loss: 0.0406 - acc: 0.9872- ETA: Epoch 00007: val_loss did not improve\n",
      "48000/48000 [==============================] - 6s 132us/step - loss: 0.0404 - acc: 0.9872 - val_loss: 0.0847 - val_acc: 0.9800\n",
      "Epoch 8/15\n",
      "47872/48000 [============================>.] - ETA: 0s - loss: 0.0330 - acc: 0.9897Epoch 00008: val_loss did not improve\n",
      "48000/48000 [==============================] - 7s 135us/step - loss: 0.0330 - acc: 0.9897 - val_loss: 0.0920 - val_acc: 0.9802\n",
      "Epoch 9/15\n",
      "47872/48000 [============================>.] - ETA: 0s - loss: 0.0299 - acc: 0.9911Epoch 00009: val_loss did not improve\n",
      "48000/48000 [==============================] - 6s 135us/step - loss: 0.0298 - acc: 0.9911 - val_loss: 0.0961 - val_acc: 0.9795\n",
      "Epoch 10/15\n",
      "47872/48000 [============================>.] - ETA: 0s - loss: 0.0276 - acc: 0.9916Epoch 00010: val_loss did not improve\n",
      "48000/48000 [==============================] - 7s 141us/step - loss: 0.0276 - acc: 0.9917 - val_loss: 0.0919 - val_acc: 0.9807\n",
      "Epoch 11/15\n",
      "47616/48000 [============================>.] - ETA: 0s - loss: 0.0240 - acc: 0.9925Epoch 00011: val_loss did not improve\n",
      "48000/48000 [==============================] - 6s 131us/step - loss: 0.0240 - acc: 0.9925 - val_loss: 0.1142 - val_acc: 0.9785\n",
      "Epoch 12/15\n",
      "47744/48000 [============================>.] - ETA: 0s - loss: 0.0234 - acc: 0.9931Epoch 00012: val_loss did not improve\n",
      "48000/48000 [==============================] - 7s 137us/step - loss: 0.0235 - acc: 0.9931 - val_loss: 0.1079 - val_acc: 0.9805\n",
      "Epoch 13/15\n",
      "47488/48000 [============================>.] - ETA: 0s - loss: 0.0212 - acc: 0.9936Epoch 00013: val_loss did not improve\n",
      "48000/48000 [==============================] - 7s 137us/step - loss: 0.0212 - acc: 0.9936 - val_loss: 0.1056 - val_acc: 0.9802\n",
      "Epoch 14/15\n",
      "47872/48000 [============================>.] - ETA: 0s - loss: 0.0191 - acc: 0.9943Epoch 00014: val_loss did not improve\n",
      "48000/48000 [==============================] - 7s 141us/step - loss: 0.0191 - acc: 0.9942 - val_loss: 0.1268 - val_acc: 0.9785\n",
      "Epoch 15/15\n",
      "47616/48000 [============================>.] - ETA: 0s - loss: 0.0191 - acc: 0.9943Epoch 00015: val_loss did not improve\n",
      "48000/48000 [==============================] - 7s 138us/step - loss: 0.0192 - acc: 0.9943 - val_loss: 0.1353 - val_acc: 0.9774\n"
     ]
    }
   ],
   "source": [
    "from keras.callbacks import ModelCheckpoint   \n",
    "\n",
    "# train the model\n",
    "# 保存能让验证集达到最佳准确率的权重\n",
    "checkpointer = ModelCheckpoint(filepath='mnist.model.best.hdf5', \n",
    "                               verbose=1, save_best_only=True)\n",
    "\n",
    "hist = model.fit(X_train, y_train, batch_size=128, epochs=15,\n",
    "                 validation_split=0.2, callbacks=[checkpointer],\n",
    "                 verbose=1, shuffle=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 10. Load the Model with the Best Classification Accuracy on the Validation Set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# load the weights that yielded the best validation accuracy\n",
    "model.load_weights('mnist.model.best.hdf5')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 11. Calculate the Classification Accuracy on the Test Set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10000/10000 [==============================] - 1s 71us/step\n",
      "Test accuracy: 97.6400%\n"
     ]
    }
   ],
   "source": [
    "# evaluate test accuracy\n",
    "score = model.evaluate(X_test, y_test, verbose=1)\n",
    "accuracy = 100 * score[1]\n",
    "\n",
    "# print test accuracy\n",
    "print('Test accuracy: %.4f%%' % accuracy)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以尝试下列变化造成模型的验证损失和测试准确度：  \n",
    "隐藏层数量，隐藏层节点数量，丢弃层，激活函数，优化器，batch尺寸"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
